﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataObjects;
using System.Data.SqlClient;
using DataAccess;
using InfrastructureSqlServer.Helpers;
using System.Configuration;
using System.Data;

namespace DataAccess
{
    public class ProdutoDAO
    {
        private List<Produto> CarregarListaProduto(SqlDataReader dr)
        {
            List<Produto> liProduto = new List<Produto>();

            while (dr.Read())
            {
                Produto produto = new Produto();
                produto.ProdutoId = int.Parse(dr["ProdutoId"].ToString());
                produto.Descricao = dr["Descricao"].ToString();
                produto.Valor = dr["Valor"].ToString();
                liProduto.Add(produto);
            }

            return liProduto;
        }

        public void Inserir(Produto _produto)
        {
            SqlParameter[] paramsToSP = new SqlParameter[2];

            paramsToSP[0] = new SqlParameter("@descricao", _produto.Descricao);
            paramsToSP[1] = new SqlParameter("@valor", _produto.Valor);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_insert_produto", paramsToSP);
                
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao inserir valor, Erro: " + e.Message);
            }

        }

        public void Alterar(Produto _produto)
        {
            SqlParameter[] paramsToSP = new SqlParameter[3];

            paramsToSP[0] = new SqlParameter("@produtoid", _produto.ProdutoId);
            paramsToSP[1] = new SqlParameter("@descricao", _produto.Descricao);
            paramsToSP[2] = new SqlParameter("@valor", _produto.Valor);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_update_produto", paramsToSP);                
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao alterar produto, Erro: " + e.Message);
            }

        }

        public bool Deletar(int _produtoId)
        {
            SqlParameter[] paramsToSP = new SqlParameter[1];

            paramsToSP[0] = new SqlParameter("@produtoid", _produtoId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_delete_produto", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao deletar produto, Erro: " + e.Message);
            }

        }

        public List<Produto> Consultar(int _produtoId)
        {
            string sqlQuery = string.Format("SELECT * FROM PRODUTO WHERE PRODUTOID = {0}", _produtoId);

            try
            {
                return CarregarListaProduto(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar produto, Erro: " + e.Message);
            }
        }

        public List<Produto> Consultar(string _produto)
        {
            string sqlQuery = string.Format("SELECT * FROM PRODUTO WHERE DESCRICAO like '%{0}%'", _produto);

            try
            {
                return CarregarListaProduto(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar produto, Erro: " + e.Message);
            }
        }

        public List<Produto> Consultar()
        {
            string sqlQuery = string.Format("SELECT * FROM PRODUTO");

            try
            {
                return CarregarListaProduto(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar produto, Erro: " + e.Message);
            }
        }

    }//class
}//namespace
